package com.pe.pgn.clubpgn.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.dao.TipoBonoDao;
import com.pe.pgn.clubpgn.domain.ClpdTipoBono;
import com.pe.pgn.clubpgn.service.TipoBonoService;

@Service("tipoBonoService")
public class TipoBonoServiceImpl implements TipoBonoService{

	@Autowired TipoBonoDao tipoBonoDao;

	public List<ClpdTipoBono> listarTiposBono(boolean addItemDefault) {
		return tipoBonoDao.listarTiposBono(addItemDefault);
	}

	public List<ClpdTipoBono> buscarTiposBono(String deTipoBono,
			String montoInicial, String montoFinal, String stTipoBono) {
		return tipoBonoDao.buscarTiposBono(deTipoBono, montoInicial, montoFinal, stTipoBono);
	}

	public ClpdTipoBono obtenerTipoBono(Long id) {
		return tipoBonoDao.obtenerTipoBono(id);
	}

	public Map<String,Object> eliminarTipoBono(Long id) {
		
		Map<String,Object> map = new HashMap<String,Object>();
		map = tipoBonoDao.validarNoUsanTipoBono(id);
		
		String isValid = String.valueOf(map.get("boolean"));
		if(isValid.equals("false")){
			return map;
		}else{
			int rows = tipoBonoDao.eliminarTipoBono(id);
			map.put("rowsDeleted", rows);
			return map;
		}
	}

	public Map<String, Object> guardarTipoBono(ClpdTipoBono tipoBono) {
		
		Map<String, Object> mapMsg = new HashMap<String, Object>();
		if(tipoBono.getId() != null && tipoBono.isStTipoBono() == false){
			Map<String,Object> map = tipoBonoDao.validarNoUsanTipoBono(tipoBono.getId());
			 
			String isValid = String.valueOf(map.get("boolean"));
			String detalle = String.valueOf(map.get("detalle"));
			
			if(isValid.equals("false")){
				
				if(detalle.equals("clpb_promocion_bono")){
					mapMsg.put(CLPConstantes.MSG, CLPConstantes.ERROR);
					mapMsg.put("detalle", "promocion_usa_tipobono");
				}else{
					mapMsg.put(CLPConstantes.MSG, CLPConstantes.ERROR);
					mapMsg.put("detalle", "bonoclientepersona_usa_tipobono");
				}				
				
				return mapMsg;
			}
		}
		
		boolean isDuplicated = tipoBonoDao.validarDuplicidadMonto(tipoBono);
		if(isDuplicated){
			mapMsg.put(CLPConstantes.MSG, CLPConstantes.ERROR);
			mapMsg.put("detalle", "duplicidad_monto");
			return mapMsg;
		}
		
		boolean isDuplicatedDesc = tipoBonoDao.validarDuplicidadDesc(tipoBono);
		if(isDuplicatedDesc){
			mapMsg.put(CLPConstantes.MSG, CLPConstantes.ERROR);
			mapMsg.put("detalle", "duplicidad_descripcion");
			return mapMsg;
		}
		
		return tipoBonoDao.guardarTipoBono(tipoBono);
	}

	public boolean validarDuplicidadMonto(ClpdTipoBono tipoBono) {
		return tipoBonoDao.validarDuplicidadMonto(tipoBono);
	}

	public boolean validarDuplicidadDesc(ClpdTipoBono tipoBono) {
		return tipoBonoDao.validarDuplicidadDesc(tipoBono);
	}

	public Map<String, Object> validarNoUsanTipoBono(Long id) {
		return tipoBonoDao.validarNoUsanTipoBono(id);
	}
}
